package com.itheima.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;

public class MyInterceptor implements HandlerInterceptor {
    /**
     * 目标方法执行之前
     * 登录检查写在这里，如果没有登录，就不执行目标方法
     *
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//      获取进过拦截器的路径
        String requestURI = request.getRequestURI();

        System.out.println("xxxxxxxxxxxx 拦截器工作 xxxxxxxxxxxx");

        //获得表单中所有的文本域的name
// 从请求 body 里面获取一些参数
        // 例如格式为 {"studentId": 10 , "studentName" : 张三 }

        // 一个重要类
//        ObjectMapper objectMapper = new ObjectMapper();
//
//        // 第一个参数可以使字符串 也可以是输入流 第二个参数是一个类对象即为要解析的结果的类对象
//        Student s = objectMapper.readValue(request.getInputStream(), Student.class);
//        // 类对象可以解析到类里的属性
//        // 1.读取输入流, 获取到需要解析的字符串
//        // 2. 把字符串按照json格式解析, 得到一组键值对
//        // 3. 根据类对象创建一个实例
//        // 4. 遍历类对象中的属性的名字, 拿着名字去键值对中查询, 查到的value就赋值到对应的对象属性中
//        // 5. 返回这个构造完成的对象
//
//        System.out.println(s.getId());
//        System.out.println(s.getName());


        StringBuilder buffer = new StringBuilder();
        BufferedReader reader = request.getReader();
        String line;
        while ((line = reader.readLine()) != null) {
            buffer.append(line);
        }
        String requestBody = buffer.toString();
        System.out.println(requestBody);


        System.out.println("xxxxxxxxxxxx 拦截器结束工作 xxxxxxxxxxxx");



        if(requestURI.equals("/books")){
            return true;
        }
        return false;

    }

    /**
     * 目标方法执行完成以后
     *
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    /**
     * 页面渲染以后
     *
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}